package com.rfid.controller;

import java.util.List;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.rfid.businness.RolBusinness;
import com.rfid.businness.UsuarioBusinness;

import com.rfid.domain.Rol;
import com.rfid.domain.Usuario;

@Controller
public class UsuarioController {

	@Autowired
	private UsuarioBusinness usuarioBusinness;

	@Autowired
	private RolBusinness roleBusinness;

	@RequestMapping(value = "/add-user.tecsup", method = RequestMethod.POST)
	public String addUser(ModelMap modelMap, 
			@RequestParam(value="usuario", required = true) String nombreUsuario,
			@RequestParam(value="contrasena",required = true) String contrasena,
			@RequestParam(value="apellidos", required = true) String apellidos,
			@RequestParam(value="nombres", required = true) String nombres,
			@RequestParam(value="dni", required = true) String dni,
			@RequestParam(value="fecha-naci", required = true) String fechaNaci,
			@RequestParam(value="rol", required = true) String nombreRol,
			@RequestParam(value="correo", required = false) String correo) {
		
		boolean estado = true;
		
		Usuario usuario = usuarioBusinness.insertUser(nombreUsuario, contrasena, apellidos, nombres, estado, dni, correo, fechaNaci);
		usuarioBusinness.insertUserRol(usuario.getIdUsuario(), nombreRol);
		modelMap.addAttribute("newUser", usuario);
		return "usuarios";
	}
	
	@RequestMapping(value = "/add-user.tecsup", method = RequestMethod.GET)
	public String nuevoUsuario(ModelMap modelMap){
		System.out.println("Entrado a add-user desde un Link (get)");
		List<Rol> lstRoles = roleBusinness.listarTodosRoles();
		modelMap.addAttribute("lstRoles", lstRoles);
		return "adduser";
	}
	
	
	
	@RequestMapping(value = "/login.tecsup", method = RequestMethod.POST)
	public String loginUsuario(Usuario usuario,
			@RequestParam(value = "username", required = true) String nombreUsuario,
			@RequestParam(value = "password", required = true) String constrasena,
			HttpSession session, ModelMap modelMap) {

		System.out.println("Usuario: " + nombreUsuario + " Constrase�a: " + constrasena);

		// Verificamos el usuario y la contrase�a
		usuario = usuarioBusinness.loginUser(nombreUsuario, constrasena);

		if (usuario != null) {
			// Obtenemos los roles del usuario
			List<Rol> myRoles = roleBusinness.listarRolesPorUsuario(usuario.getIdUsuario());

			for (Rol rol : myRoles) {
				System.out.println("Rol: " + rol.getNombreRol() + " - " + rol.getDescripcion());
			}

			if (myRoles != null) {
				// Asignamos los roles al usuario logueado
				usuario.setMyrol(myRoles.get(0));
			}

			session.setAttribute("USER_SESSION", usuario);
			return "principal";
		} else {
			modelMap.addAttribute("errorMsg", "Usuario y/o Contrase�a Incorrectos");
			return "index";
		}

	}

	@RequestMapping(value = "/salir.tecsup", method = RequestMethod.GET)
	public String salir(HttpSession session) {
		session.invalidate();
		return "index";
	}
	@RequestMapping(value = "/usuarios.tecsup", method = RequestMethod.GET)
	public String Buscar(ModelMap modelMap){
		
		System.out.println("Entrado a usuarioa desde un Link (get)");
		return "usuarios";
	}
	
	@RequestMapping(value = "/buscar-usuario.tecsup", method = RequestMethod.POST)
	public String buscarPorNombre(ModelMap modelMap,
			@RequestParam(value = "usuario", required = true) String parametro) {
		List<Usuario> lstUsuario = usuarioBusinness.listarPorNombre(parametro);
		for(Usuario usuario : lstUsuario){
			List<Rol> lstRol = roleBusinness.listarRolesPorUsuario(usuario.getIdUsuario());
			if(lstRol != null){
				usuario.setMyrol(lstRol.get(0));
			}
			
		}
		modelMap.addAttribute("lstUsuario",lstUsuario);
		return "usuarios";
		
		}
	}

